from flask import Blueprint, jsonify, request, Flask

from applications.models.frontend import ProductCate, Article, Product
from applications.models.backend import Admin
from .mock import mock_advertisements, mock_goods, mock_recommend_goods, get_mock_data
from applications.view.miniapp.api import register_miniapp_api_bps  # 导入小程序API蓝图注册函数


# 创建小程序蓝图
miniapp_bp = Blueprint('miniapp', __name__)


# 管理员信息获取路由
@miniapp_bp.route('/miniapp/admin-info', methods=['GET'])
def get_admin():
    # 获取Token
    token = request.headers.get('Token')
    admin_id = 1
    print('Session管理员 admin_id:', admin_id)
    admin = Admin.query.filter_by(id=admin_id).first()
    if admin is None:
        return jsonify({'code': 404, 'msg': '管理员不存在'}), 404
    # 序列化管理员对象为字典
    admin_info = {
        'id': admin.id,
        'nickname': admin.username,
        'phone': admin.phone,
        'avatar_url': 'https://tse4-mm.cn.bing.net/th/id/OIP-C.MqovI15z6O3xqrbcjHUm4gAAAA?r=0&o=7rm=3&rs=1&pid=ImgDetMain',
        'sex': '未知',
        'address': '浙江杭州',
        'created_at': admin.created_at.strftime('%Y-%m-%d %H:%M:%S')
    }
    return jsonify({'code': 200, 'data': admin_info})


# 一级分类接口
@miniapp_bp.route('/miniapp/findCategory', methods=['GET'])
def find_category():
    try:
        # 查询一级分类
        categories = ProductCate.query.filter_by(parent_id=None).all()

        if not categories:
            return jsonify({'code': 404, 'message': '未找到一级分类'}), 404

        # 序列化分类数据
        category_list = [
            {
                'id': category.id,
                'name': category.name,
                'imageUrl': category.image,
            }
            for category in categories
        ]

        return jsonify({'code': 200, 'message': '成功', 'data': category_list})
    except Exception as e:
        return jsonify({'code': 500, 'message': f'服务器错误: {str(e)}'}), 500
# 获取广告信息
@miniapp_bp.route('/miniapp/advertisement', methods=['GET'])
def get_advertisements():
    return jsonify({'code': 200, 'message': '成功', 'data': mock_advertisements})

# 获取商品列表
@miniapp_bp.route('/miniapp/findListGoods', methods=['GET'])
def find_list_goods():

    return jsonify({'code': 200, 'message': '成功', 'data': mock_goods})

# 获取推荐商品
@miniapp_bp.route('/miniapp/findRecommendGoods', methods=['GET'])
def find_recommend_goods():
    return jsonify({'code': 200, 'message': '成功', 'data': mock_recommend_goods})


# 获取分类树接口
@miniapp_bp.route('/index/findCategoryTree', methods=['GET'])
def find_category_tree():
    """
    获取分类树结构，包含每个分类下的商品信息
    :return: 返回包含商品的分类树结构
    """
    try:
        # 查询所有分类
        categories = ProductCate.query.all()

        if not categories:
            return jsonify({'code': 404, 'message': '未找到分类数据'}), 404

        # 构建分类树结构
        category_tree = []
        for category in categories:
            # 获取该分类下的所有商品
            products = category.products
            # 构建商品数据
            product_list = [{
                'id': product.id,
                'name': product.name,
                'imageUrl': product.main_image
            } for product in products]
            
            # 构建分类数据
            category_data = {
                'id': category.id,
                'name': category.name,
                'imageUrl': category.image,
                'children': product_list
            }
            category_tree.append(category_data)

        return jsonify({
            'code': 200,
            'message': '成功',
            'data': category_tree
        })
    except Exception as e:
        return jsonify({'code': 500, 'message': f'服务器错误: {str(e)}'}), 500

# 每日推文接口
@miniapp_bp.route('/miniapp/dailyArticle', methods=['GET'])
def get_daily_article():
    """
    获取每日推荐文章
    :return: 返回已审核通过的文章列表
    """
    try:
        # 查询已审核通过的文章
        articles = Article.query.filter_by(status='approved').order_by(Article.published_date.desc()).all()

        if not articles:
            return jsonify({'code': 404, 'message': '未找到推荐文章'}), 404

        # 序列化文章数据
        article_list = [{
            'id': article.id,
            'title': article.title,
            'content': article.content,
            'image': article.image,
            'author': article.user.username,
            'category_name': article.articlecate.name,
            'published_date': article.published_date.strftime('%Y-%m-%d %H:%M:%S') if article.published_date else 'N/A'
        } for article in articles]

        return jsonify({
            'code': 200,
            'message': '成功',
            'data': article_list
        })
    except Exception as e:
        return jsonify({'code': 500, 'message': f'服务器错误: {str(e)}'}), 500

def miniapp_bps(app: Flask):
    # 在admin_bp主蓝图下注册子蓝图
    app.register_blueprint(miniapp_bp)
    # 注册小程序API蓝图
    register_miniapp_api_bps(app)
